home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / diskBoot.OpenProm / RCS / fsDisk.c,BAD < prev    next >
Text File  |  1990-11-27  |  35KB  |  1,245 lines

  1. 10
  2. # or something immediately after the boot program prints out the kernel sizes.)
  3. # BOOTDIR is the directory in which the boot things live.
  4. #
  5.  
  6. #if !empty(TM:Msun3)
  7. KERNELSTART    ?= 0x3fe0
  8. LINKSTART    ?= d4000
  9. #else
  10. #if !empty(TM:Msun4)
  11. KERNELSTART    ?= 0x4000
  12. LINKSTART    ?= $(KERNELSTART:S/0x/20/)
  13. #else
  14. #if !empty(TM:Mds3100)
  15. KERNELSTART    ?= 0x80010000
  16. LINKSTART    ?= $(KERNELSTART:S/0x//)
  17. #else
  18. #if !empty(TM:Msun4c)
  19. KERNELSTART    ?= 0x3fe0
  20. LINKSTART    ?= $(KERNELSTART:S/0x/20/)
  21. #else
  22. KERNELSTART    ?= 0x4000
  23. LINKSTART    ?= $(KERNELSTART:S/0x/b/)
  24. #endif
  25. #endif
  26. #endif
  27. #endif
  28.  
  29. CFLAGS        += -DBOOT_CODE=0x$(LINKSTART) \
  30.         -DKERNEL_START=$(KERNELSTART) -DBOOTDIR=\"$(INSTALLDIR)\" \
  31.         -DBOOT_FILE=\"$(TM)\"
  32.  
  33.  
  34. #
  35. # The .INCLUDES variable already includes directories that should be
  36. # used by cc and other programs by default.  Remove them, just so that
  37. # the output looks cleaner.
  38.  
  39. CFLAGS        += $(.INCLUDES:S|^-I/sprite/lib/include$||g:S|^-I/sprite/lib/include/$(TM).md$||g)
  40.  
  41. #
  42. # Transformation rules: these have special features to place .o files
  43. # in md subdirectories, run preprocessor over .s files, etc.
  44. # There are no profile rules for boot programs because they aren't profiled.
  45. #
  46.  
  47. .c.o        :
  48.     $(RM) -f $(.TARGET)
  49.     $(CC) $(CFLAGS) -c $(.IMPSRC) -o $(.TARGET)
  50. .s.o    :
  51. #if empty(TM:Mds3100)
  52.     $(CPP) $(CFLAGS:M-[ID]*) -m$(TM) -D$(TM) -D_ASM $(.IMPSRC) > $(.PREFIX).pp
  53.     $(AS) -o $(.TARGET) $(AFLAGS) $(.PREFIX).pp
  54.     $(RM) -f $(.PREFIX).pp
  55. #else
  56.     $(RM) -f $(.TARGET)
  57.     $(AS) $(AFLAGS) $(.IMPSRC) -o $(.TARGET)
  58. #endif
  59.  
  60. #
  61. # The following targets are .USE rules for creating things.
  62. #
  63.  
  64. #
  65. # MAKEBOOT usage:
  66. #    <program> : <objects> <libraries> MAKEBOOT
  67. #
  68. # Similar to MAKECMD, except it doesn't create the version.[ho] files,
  69. # and the variable LINKSTART is used to define where the boot program
  70. # gets loaded.
  71. #
  72. MAKEBOOT    :  .USE -lc
  73.     rm -f $(.TARGET)
  74.     $(LD) -N -e start -T $(LINKSTART) $(CFLAGS:M-L*) $(LDFLAGS) \
  75.         -o $(.TARGET) $(.ALLSRC:N-lc:Nend.o) -lc $(.ALLSRC:Mend.o)
  76.  
  77. #
  78. # MAKEINSTALL usage:
  79. #    install :: <dependencies> MAKEINSTALL
  80. #
  81. # The program is installed in $(TMINSTALLDIR) and backed-up to
  82. # $(TMINSTALLDIR).old
  83. #
  84. #ifndef NOBACKUP
  85. BACKUP        = -b $(TMINSTALLDIR).old
  86. #ifdef BACKUPAGE
  87. BACKUP += -B $(BACKUPAGE)
  88. #endif
  89. #else
  90. BACKUP        =
  91. #endif  NOBACKUP
  92.  
  93. MAKEINSTALL    : .USE
  94.     ${RM} -f $(TMINSTALLDIR)/$(NAME)
  95.     ${INSTALL_PROG} $(TM).md/$(NAME) $(TMINSTALLDIR)/$(NAME)
  96.  
  97. #
  98. # MAKELINT usage:
  99. #    <fluff-file> : <sources to be linted> MAKELINT
  100. #
  101. # <fluff-file> is the place to store the output from the lint.
  102. #
  103. MAKELINT    : .USE
  104.     $(RM) -f $(.TARGET)
  105.     $(LINT) $(LINTFLAGS) $(CFLAGS:M-[ID]*) $(.ALLSRC) > $(.TARGET) 2>&1
  106.  
  107. #
  108. # MAKEDEPEND usage:
  109. #    <dependency-file> : <sources> MAKEDEPEND
  110. #
  111. # Generate dependency file suitable for inclusion in future makes.
  112.  
  113. MAKEDEPEND    : .USE
  114.     @$(TOUCH) $(DEPFILE)
  115.     $(MAKEDEPEND) $(CFLAGS:M-[ID]*) -m $(TM) -w60 -f $(DEPFILE) $(.ALLSRC)
  116.     @$(MV) -f $(DEPFILE) $(DEPFILE).tmp
  117.     @$(SED) -e '/^#/!s|^.|$(TM).md/&|' <$(DEPFILE).tmp > $(DEPFILE)
  118.     @$(RM) -f $(DEPFILE).tmp
  119.  
  120. #if !defined(no_targets) && defined(NAME)
  121. #
  122. # We should define the main targets (make, make install, etc.).  See the
  123. # mkmf man page for details on what these do.
  124. #
  125. LIBS            ?=
  126.  
  127. #
  128. # start.o must come first
  129. default            : $(TM).md/$(NAME)
  130. $(TM).md/$(NAME)    : $(TM).md/start.o $(OBJS:S/$(TM).md\/start.o//:S/makeBoot.o//) MAKEBOOT
  131.  
  132.  
  133. clean            :: .NOEXPORT tidy 
  134.     $(RM) -f $(TM).md/$(NAME) 
  135.  
  136. tidy            :: .NOEXPORT 
  137.     $(RM) -f $(CLEANOBJS) $(CLEANOBJS:M*.o:S/.o$/.po/g) \
  138.             y.tab.c lex.yy.c core \
  139.         $(TM).md/lint \
  140.         a.out *~ $(TM).md/*~ version.h gmon.out mon.out
  141.  
  142. DEPFILE = $(TM).md/dependencies.mk
  143.  
  144. depend            : $(DEPFILE)
  145. $(DEPFILE)        ! $(SRCS:M*.c) $(SRCS:M*.s) MAKEDEPEND
  146.  
  147.  
  148. #
  149. # For "install", a couple of tricks.  First, allow local.mk to disable
  150. # by setting no_install.  Second, use :: instead of : so that local.mk
  151. # can augment install with additional stuff.  Third, don't install if
  152. # TMINSTALLDIR isn't set.
  153. #
  154. #ifndef no_install
  155. #ifdef TMINSTALLDIR
  156. install            :: $(TM).md/$(NAME) installman MAKEINSTALL
  157. #else
  158. install            :: .SILENT
  159.     echo "Can't install $(NAME):  no install directory defined"
  160. #endif TMINSTALLDIR
  161. #endif no_install
  162.  
  163.  
  164. #if eg immediately after the boot program prints out the kernel sizes.)
  165. # BOOTDIR is the directory in which the boot things live.
  166. #
  167.  
  168. #if !empty(TM:Msun3)
  169. KERNELSTART    ?= 0x3fe0
  170. LINKSTART    ?= d4000
  171. #else
  172. #if !empty(TM:Msun4)
  173. KERNELSTART    ?= 0x4000
  174. LINKSTART    ?= $(KERNELSTART:S/0x/20/)
  175. #else
  176. #if !empty(TM:Mds3100)
  177. KERNELSTART    ?= 0x80010000
  178. LINKSTART    ?= $(KERNELSTART:S/0x//)
  179. #else
  180. #if !empty(TM:Msun4c)
  181. KERNELSTART    ?= 0x3fe0
  182. LINKSTART    ?= $(KERNELSTART:S/0x/20/)
  183. #else
  184. KERNELSTART    ?= 0x4000
  185. LINKSTART    ?= $(KERNELSTART:S/0x/b/)
  186. #endif
  187. #endif
  188. #endif
  189. #endif
  190.  
  191. CFLAGS        += -DBOOT_CODE=0x$(LINKSTART) \
  192.         -DKERNEL_START=$(KERNELSTART) -DBOOTDIR=\"$(INSTALLDIR)\" \
  193.         -DOPENPROMS -DSAIO_COMPAT -DBOOT_FILE=\"$(TM)\"
  194.  
  195.  
  196. #
  197. # The .INCLUDES variable already includes directories that should be
  198. # used by cc and other programs by default.  Remove them, just so that
  199. # the output looks cleaner.
  200.  
  201. CFLAGS        += $(.INCLUDES:S|^-I/sprite/lib/include$||g:S|^-I/sprite/lib/include/$(TM).md$||g)
  202.  
  203. #
  204. # Transformation rules: these have special features to place .o files
  205. # in md subdirectories, run preprocessor over .s files, etc.
  206. # There are no profile rules for boot programs because they aren't profiled.
  207. #
  208.  
  209. .c.o        :
  210.     $(RM) -f $(.TARGET)
  211.     $(CC) $(CFLAGS) -c $(.IMPSRC) -o $(.TARGET)
  212. .s.o    :
  213. #if empty(TM:Mds3100)
  214.     $(CPP) $(CFLAGS:M-[ID]*) -m$(TM) -D$(TM) -D_ASM $(.IMPSRC) > $(.PREFIX).pp
  215.     $(AS) -o $(.TARGET) $(AFLAGS) $(.PREFIX).pp
  216.     $(RM) -f $(.PREFIX).pp
  217. #else
  218.     $(RM) -f $(.TARGET)
  219.     $(AS) $(AFLAGS) $(.IMPSRC) -o $(.TARGET)
  220. #endif
  221.  
  222. #
  223. # The following targets are .USE rules for creating things.
  224. #
  225.  
  226. #
  227. # MAKEBOOT usage:
  228. #    <program> : <objects> <libraries> MAKEBOOT
  229. #
  230. # Similar to MAKECMD, except it doesn't create the version.[ho] files,
  231. # and the variable LINKSTART is used to define where the boot program
  232. # gets loaded.
  233. #
  234. MAKEBOOT    :  .USE -lc
  235.     rm -f $(.TARGET)
  236.     $(LD) -N -e start -T $(LINKSTART) $(CFLAGS:M-L*) $(LDFLAGS) \
  237.         -o $(.TARGET) $(.ALLSRC:N-lc:Nend.o) -lc $(.ALLSRC:Mend.o)
  238.  
  239. #
  240. # MAKEINSTALL usage:
  241. #    install :: <dependencies> MAKEINSTALL
  242. #
  243. # The program is installed in $(TMINSTALLDIR) and backed-up to
  244. # $(TMINSTALLDIR).old
  245. #
  246. #ifndef NOBACKUP
  247. BACKUP        = -b $(TMINSTALLDIR).old
  248. #ifdef BACKUPAGE
  249. BACKUP += -B $(BACKUPAGE)
  250. #endif
  251. #else
  252. BACKUP        =
  253. #endif  NOBACKUP
  254.  
  255. MAKEINSTALL    : .USE
  256.     ${RM} -f $(TMINSTALLDIR)/$(NAME)
  257.     ${INSTALL_PROG} $(TM).md/$(NAME) $(TMINSTALLDIR)/$(NAME)
  258.  
  259. #
  260. # MAKELINT usage:
  261. #    <fluff-file> : <sources to be linted> MAKELINT
  262. #
  263. # <fluff-file> is the place to store the output from the lint.
  264. #
  265. MAKELINT    : .USE
  266.     $(RM) -f $(.TARGET)
  267.     $(LINT) $(LINTFLAGS) $(CFLAGS:M-[ID]*) $(.ALLSRC) > $(.TARGET) 2>&1
  268.  
  269. #
  270. # MAKEDEPEND usage:
  271. #    <dependency-file> : <sources> MAKEDEPEND
  272. #
  273. # Generate dependency file suitable for inclusion in future makes.
  274.  
  275. MAKEDEPEND    : .USE
  276.     @$(TOUCH) $(DEPFILE)
  277.     $(MAKEDEPEND) $(CFLAGS:M-[ID]*) -m $(TM) -w60 -f $(DEPFILE) $(.ALLSRC)
  278.     @$(MV) -f $(DEPFILE) $(DEPFILE).tmp
  279.     @$(SED) -e '/^#/!s|^.|$(TM).md/&|' <$(DEPFILE).tmp > $(DEPFILE)
  280.     @$(RM) -f $(DEPFILE).tmp
  281.  
  282. #if !defined(no_targets) && defined(NAME)
  283. #
  284. # We should define the main targets (make, make install, etc.).  See the
  285. # mkmf man page for details on what these do.
  286. #
  287. LIBS            ?=
  288.  
  289. #
  290. # start.o must come first
  291. default            : $(TM).md/$(NAME)
  292. $(TM).md/$(NAME)    : $(TM).md/start.o $(OBJS:S/$(TM).md\/start.o//:S/makeBoot.o//) MAKEBOOT
  293.  
  294.  
  295. clean            :: .NOEXPORT tidy 
  296.     $(RM) -f $(TM).md/$(NAME) 
  297.  
  298. tidy            :: .NOEXPORT 
  299.     $(RM) -f $(CLEANOBJS) $(CLEANOBJS:M*.o:S/.o$/.po/g) \
  300.             y.tab.c lex.yy.c core \
  301.         $(TM).md/lint \
  302.         a.out *~ $(TM).md/*~ version.h gmon.out mon.out
  303.  
  304. DEPFILE = $(TM).md/dependencies.mk
  305.  
  306. depend            : $(DEPFILE)
  307. $(DEPFILE)        ! $(SRCS:M*.c) $(SRCS:M*.s) MAKEDEPEND
  308.  
  309.  
  310. #
  311. # For "install", a couple of tricks.  First, allow local.mk to disable
  312. # by setting no_install.  Second, use :: instead of : so that local.mk
  313. # can augment install with additional stuff.  Third, don't install if
  314. # TMINSTALLDIR isn't set.
  315. #
  316. #ifndef no_install
  317. #ifdef TMINSTALLDIR
  318. install            :: $(TM).md/$(NAME) installman MAKEINSTALL
  319. #else
  320. install            :: .SILENT
  321.     echo "Can't install $(NAME):  no install directory defined"
  322. #endif TMINSTALLDIR
  323. #endif no_insta╨áDæ2 û
  324.   ╨áDÿ
  325.   É Æ    ö
  326. û ÿ ?·┌`xƒ├@ü╟αüΦ%x:%x:%x:%x:%x:%x
  327. ¥π┐É≡'áDαáD╥ ╘  ╓  ╪  ┌  £#á╨  ╨#á\É Æ    ö
  328. û ÿ Ü?·Γ`xƒ─@£áü╟αüΦ@(#)inet.c    1.12 88/02/08    Copyr 1986 Sun Micro      p $l$° ¿⌠¿ ╚
  329. å  ≤8 ¼
  330. å  ≤T ê
  331. å  ≤x ` Γ \Γ 0    å  ≤╨ t ╪ p╪ D    å  ⌠╝
  332. 8 ╘
  333. 4╘    Σ ╤    α╤    Ç »    |»    `
  334. å  ÷á    8 ì    4ì    
  335. å  ÷ⁿ0 ╓,╓  êê\å  °ñ─
  336. å  ∙<x ╓t╓$ ╓ ╓ÿ
  337. å  ·hH
  338. å  ·╕l    å  √ö°    å  ⁿ\    å  ⁿñ─
  339. å  ■<ÿ    å  ■h  ╓╓ⁿå   Φå   ` \Då   ╝¿╓.0;C└NU≡]`hnu≡z âαì╨¢ú└»@╝@╞═╫gcc_compiled._sccsid_etherbroadcastaddr_myetheraddr_idprom_inet_init_bzero_revarp_ip_output_bcmp_bcopy_arp_ipcksum_ip_input_in_broadaddr_comarp_inet_print_ether_print_in_lnaof_ifnet_rawintrqhead     1.2;
  340. branch   ;
  341. access   ;
  342. symbols  ;
  343. locks    dlong:1.2; strict;
  344. comment  @ * @;
  345.  
  346.  
  347. 1.2
  348. date     89.06.16.08.30.31;  author brent;  state Exp;
  349. branches ;
  350. next     1.1;
  351.  
  352. 1.1
  353. date     89.06.02.11.10.59;  author brent;  state Exp;
  354. branches ;
  355. next     ;
  356.  
  357.  
  358. desc
  359. @Header file for sprite tftp boot program
  360. @
  361.  
  362.  
  363. 1.2
  364. log
  365. @Added machparam.h
  366. @
  367. text
  368. @/*-
  369.  * boot.h --
  370.  *     Header file for sprite tftp boot program
  371.  *
  372.  * Copyright (c) 1987 by the Regents of the University of California
  373.  *
  374.  * Permission to use, copy, modify, and distribute this
  375.  * software and its documentation for any purpose and without
  376.  * fee is hereby granted, provided that the above copyright
  377.  * notice appear in all copies.  The University of California
  378.  * makes no representations about the suitability of this
  379.  * software for any purpose.  It is provided "as is" without
  380.  * express or implied warranty.
  381.  *
  382.  *    "$Header$ SPRITE (Berkeley)"
  383.  */
  384. #ifndef _BOOT_H
  385. #define _BOOT_H
  386.  
  387. #include <machparam.h>
  388.  
  389. #ifndef ASM
  390. #include    "sunromvec.h"
  391. #endif /* ASM */
  392.  
  393. #define BOOT_START        (BOOT_CODE-KERNEL_START)
  394.  
  395. #define printf      (*romp->v_printf)
  396. #define printhex  (*romp->v_printhex)
  397.  
  398. #endif /* _BOOT_H */
  399. @
  400.  
  401.  
  402. 1.1
  403. log
  404. @Initial revision
  405. @
  406. text
  407. @d19 2
  408. @
  409. #
  410. # This Makefile is included by several other system Makefiles.  It
  411. # sets up variables that depend on the particular target machine
  412. # being compiled for, such as compiler flags.  One variable should
  413. # be defined before including this file:
  414. #
  415. # TM        Target machine for which code is to be generated (e.g.
  416. #        sun2, sun3, spur, etc.)
  417. #
  418. # This file will create a variable TMCFLAGS, which, when passed to CC,
  419. # will ensure that an object file is generated for machines of type TM.
  420. # It will also generate a variable TMAFLAGS, which will serve the
  421. # same purpose for the assembler.  Finally, it will set program names
  422. # like AS and LD to values appropriate for the machine type.
  423. #
  424. # The only flags that should be defined here are those that are required 
  425. # for successful compilation on that machine.  Optional flags such as
  426. # optimization should be defined in local modules.  
  427. #
  428. # $Header: /sprite/lib/pmake/RCS/tm.mk,v 1.44 90/12/11 14:18:13 kupfer Exp $
  429.  
  430. # Down at the bottom we elide ds3100 from $MACHINES.  For the error
  431. # messages below, though, we want to keep the ds3100 in $MACHINES.
  432. # So, we define a new variable for use in the error messages.
  433.  
  434. SUPPORTED_MACHINES    := $(MACHINES)
  435.  
  436. # What follows is a big long if/elif chain, keyed on TM, to set flags,
  437. # CC, etc.  Each top-level branch also verifies that TM is in
  438. # MACHINES.  It would be nice if we could do this in just one place,
  439. # but pmake doesn't like the construct "empty(MACHINES:M$(TM))".
  440.  
  441. #if !empty(TM:Msun3)
  442. TMCFLAGS        = -msun3 
  443. TMAFLAGS        = -m68020
  444. LDFLAGS            = -msun3
  445. #if empty(MACHINES:Msun3) && !make(newtm)
  446. .BEGIN:
  447.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  448.     @echo "supported machines ($(SUPPORTED_MACHINES))."
  449.     exit 1
  450. #endif
  451. #if !empty(MACHINE:Mds3100)
  452. CC                      = gcc
  453. AS                      = gas
  454. LD                      = gld
  455. #endif /* MACHINE:ds3100 */
  456. #if !empty(MACHINE:Mds5000)
  457. CC                      = gcc
  458. AS                      = gas
  459. LD                      = gld
  460. #endif /* MACHINE:ds5000 */
  461.  
  462. #elif !empty(TM:Mspur)
  463. TMCFLAGS        = -mspur -mlong-jumps -DLOCKREG 
  464. TMAFLAGS        =
  465. AS            = /sprite/cmds.$(MACHINE)/sas
  466. LD            = /sprite/cmds.$(MACHINE)/sld
  467. RANLIB            = /sprite/cmds.$(MACHINE)/sranlib
  468. XLD            = /sprite/cmds.$(MACHINE)/xld
  469. NOOPTIMIZATION        =
  470. LDFLAGS            = 
  471. #if empty(MACHINES:Mspur) && !make(newtm)
  472. .BEGIN:
  473.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  474.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  475.     exit 1
  476. #endif
  477.  
  478. #elif !empty(TM:Msun4)
  479. TMCFLAGS        = -msun4 -Dsprite -Dsun4
  480. TMAFLAGS        = -msparc
  481. LDFLAGS            = -msun4
  482. #if empty(MACHINES:Msun4) && !make(newtm)
  483. .BEGIN:
  484.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  485.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  486.     exit 1
  487. #endif
  488. #if !empty(MACHINE:Mds3100)
  489. CC                      = gcc
  490. AS                      = gas
  491. LD                      = gld
  492. #endif /* MACHINE:ds3100 */
  493. #if !empty(MACHINE:Mds5000)
  494. CC                      = gcc
  495. AS                      = gas
  496. LD                      = gld
  497. #endif /* MACHINE:ds5000 */
  498.  
  499. #elif !empty(TM:Mcleansun4)
  500. TMCFLAGS        = -msun4 -Dsprite -Dsun4 -DCLEAN -DCLEAN_LOCK
  501. TMAFLAGS        = -msparc
  502. LDFLAGS            = -msun4
  503. #if empty(MACHINES:Mcleansun4) && !make(newtm)
  504. .BEGIN:
  505.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  506.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  507.     exit 1
  508. #endif
  509. #if !empty(MACHINE:Mds3100)
  510. CC                      = gcc
  511. AS                      = gas
  512. LD                      = gld
  513. #endif /* MACHINE:ds3100 */
  514. #if !empty(MACHINE:Mds5000)
  515. CC                      = gcc
  516. AS                      = gas
  517. LD                      = gld
  518. #endif /* MACHINE:ds5000 */
  519.  
  520. #elif !empty(TM:Msun4c)
  521. TMCFLAGS        = -msun4 -Dsprite -Dsun4c -Usun4
  522. TMAFLAGS        = -msparc
  523. LDFLAGS            = -msun4
  524. #if empty(MACHINES:Msun4c) && !make(newtm)
  525. .BEGIN:
  526.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  527.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  528.     exit 1
  529. #endif
  530. #if !empty(MACHINE:Mds3100)
  531. CC                      = gcc
  532. AS                      = gas
  533. LD                      = gld
  534. #endif /* MACHINE:ds3100 */
  535. #if !empty(MACHINE:Mds5000)
  536. CC                      = gcc
  537. AS                      = gas
  538. LD                      = gld
  539. #endif /* MACHINE:ds5000 */
  540.  
  541. #elif !empty(TM:Mcleansun4c)
  542. TMCFLAGS        = -msun4 -Dsprite -Dsun4 -Dsun4c -DCLEAN -DCLEAN_LOCK
  543. TMAFLAGS        = -msparc
  544. LDFLAGS            = -msun4
  545. #if empty(MACHINES:Mcleansun4c) && !make(newtm)
  546. .BEGIN:
  547.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  548.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  549.     exit 1
  550. #endif
  551. #if !empty(MACHINE:Mds3100)
  552. CC                      = gcc
  553. AS                      = gas
  554. LD                      = gld
  555. #endif /* MACHINE:ds3100 */
  556. #if !empty(MACHINE:Mds5000)
  557. CC                      = gcc
  558. AS                      = gas
  559. LD                      = gld
  560. #endif /* MACHINE:ds5000 */
  561.  
  562. #elif !empty(TM:Mcleansun3) 
  563. TMCFLAGS        = -msun3 -Dsun3 -DCLEAN -DCLEAN_LOCK
  564. TMAFLAGS        = -m68020
  565. LDFLAGS            = 
  566. #if empty(MACHINES:Mcleansun3) && !make(newtm)
  567. .BEGIN:
  568.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  569.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  570.     exit 1
  571. #endif
  572.  
  573. #elif !empty(TM:Mcleands3100)
  574. TMCFLAGS    = -Dds3100 -Dsprite -DCLEAN -DCLEAN_LOCK -Uultrix
  575. TMAFLAGS    = -Dds3100 -Dsprite -Uultrix
  576. LDFLAGS        = -L/sprite/lib/ds3100.md
  577. #if empty(MACHINES:Mcleands3100) && !make(newtm)
  578. .BEGIN:
  579.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  580.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  581.     exit 1
  582. #endif
  583.  
  584. #elif !empty(TM:Mds3100)
  585. TMCFLAGS    = -Dds3100 -Dsprite -Uultrix
  586. TMAFLAGS    = -Dds3100 -Dsprite -Uultrix
  587. LDFLAGS        = -L/sprite/lib/ds3100.md
  588. #if empty(MACHINES:Mds3100) && !make(newtm)
  589. .BEGIN:
  590.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  591.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  592.     exit 1
  593. #endif
  594. #if !empty(CC:Mgcc)
  595. TMCFLAGS    += -Dmips -DLANGUAGE_C
  596. #endif
  597.  
  598. #elif !empty(TM:Mds5000)
  599. TMCFLAGS    = -Dds5000 -Dsprite -Uultrix
  600. TMAFLAGS    = -Dds5000 -Dsprite -Uultrix
  601. LDFLAGS        = -L/sprite/lib/ds5000.md
  602. #if empty(MACHINES:Mds5000) && !make(newtm)
  603. .BEGIN:
  604.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  605.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  606.     exit 1
  607. #endif
  608. #if !empty(CC:Mgcc)
  609. TMCFLAGS    += -Dmips -DLANGUAGE_C
  610. #endif
  611.  
  612. #elif !empty(TM:Msun4nw)
  613.  
  614. #    Sun4 compiled not to use save/restore register window instructions.
  615. TMCFLAGS        = -msun4 -Dsprite -Dsun4 -B/users/mendel/lib/$(MACHINE).md/ -mno-windows -DNOWINDOWS
  616. TMAFLAGS        = -msparc
  617. LDFLAGS            = -msun4
  618. #if empty(MACHINES:Msun4nw) && !make(newtm)
  619. .BEGIN:
  620.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  621.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  622.     exit 1
  623. #endif
  624.  
  625. #elif !empty(TM:Msymm)
  626. TMCFLAGS    = -msymm -Dsprite -Dsymm
  627. TMAFLAGS    = -msymm
  628. LDFLAGS        = -msymm
  629. #if empty(MACHINES:Msymm) && !make(newtm)
  630. .BEGIN:
  631.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  632.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  633.     exit 1
  634. #endif
  635. #if !empty(MACHINE:Mds3100)
  636. CC                      = gcc
  637. AS                      = gas
  638. LD                      = gld
  639. #endif /* MACHINE:ds3100 */
  640. #if !empty(MACHINE:Mds5000)
  641. CC                      = gcc
  642. AS                      = gas
  643. LD                      = gld
  644. #endif /* MACHINE:ds5000 */
  645.  
  646. #elif !empty(TM:Msym)
  647. TMCFLAGS    = -msym -Dsprite -Dsym
  648. TMAFLAGS    = -msym
  649. LDFLAGS        = -msym
  650. #if empty(MACHINES:Msym) && !make(newtm)
  651. .BEGIN:
  652.     @echo "Sorry, the target machine ($(TM)) isn't in the list of"
  653.     @echo "allowed machines ($(SUPPORTED_MACHINES))."
  654.     exit 1
  655. #endif
  656. #if !empty(MACHINE:Mds3100)
  657. CC                      = gcc
  658. AS                      = gas
  659. LD                      = gld
  660. #endif /* MACHINE:ds3100 */
  661. #if !empty(MACHINE:Mds5000)
  662. CC                      = gcc
  663. AS                      = gas
  664. LD                      = gld
  665. #endif /* MACHINE:ds5000 */
  666.  
  667. #else
  668.  
  669. # (some random TM)
  670.  
  671. TMCFLAGS        ?= -m$(TM)
  672. TMAFLAGS        ?= -m$(TM)
  673. #endif
  674.  
  675. # (End of big if/elif chain)
  676.  
  677. # The line below makes ds3100 and people's private "machines" invisible
  678. # under for purposes of commands like "make all":  you have to ask for
  679. # them explicitly with the TM= option.
  680.  
  681.  
  682. #ifdef MACHINES
  683. MACHINES    := $(MACHINES:Nfd:Njhh:Ncleansun4:Ncleansun4c:Ncleansun3:Ncleands3100:Nspur:Nsun4nw:Nsymm)
  684. #endif
  685.  
  686. #if !make(clean) && !/*    @(#)idprom.h 1.17 89/12/13 SMI    */
  687.  
  688. /*
  689.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  690.  */
  691.  
  692. #ifndef _mon_idprom_h
  693. #define _mon_idprom_h
  694.  
  695. #ifndef LOCORE
  696. /*
  697.  * Structure declaration for ID prom in CPU and Ethernet boards
  698.  */
  699.  
  700. struct idprom {
  701.     unsigned char    id_format;    /* format identifier */
  702.     /* The following fields are valid only in format IDFORM_1. */
  703.     unsigned char    id_machine;    /* machine type */
  704.     unsigned char    id_ether[6];    /* ethernet address */
  705.     long        id_date;    /* date of manufacture */
  706.     unsigned    id_serial:24;    /* serial number */
  707.     unsigned char    id_xsum;    /* xor checksum */
  708.     unsigned char    id_undef[16];    /* undefined */
  709. };
  710. #endif LOCORE
  711.  
  712. #define IDFORM_1    1    /* Format number for first ID proms */
  713.  
  714. /*
  715.  * The machine type field assignments are constrained such that the
  716.  * IDM_ARCH_MASK bits define the CPU architecture and the remaining bits
  717.  * identify the individual implementation of that architecture.
  718.  */
  719. #define    IDM_ARCH_MASK    0xf0    /* mask for architecture bits */
  720. #define    IDM_ARCH_SUN2    0x00    /* arch value for Sun-2 */
  721. #define    IDM_ARCH_SUN3    0x10    /* arch value for Sun-3 */
  722. #define IDM_ARCH_SUN4   0x20    /* arch value for Sun-4 */
  723. #define IDM_ARCH_SUN3X    0x40    /* arch value for Sun-3x */
  724. #define    IDM_ARCH_SUN4C    0x50    /* arch value for Sun-4c */
  725.  
  726. /* 
  727.  * All possible values of the id_machine field (so far): 
  728.  */
  729. #define    IDM_SUN2_MULTI        1    /* Machine type for Multibus CPU brd */
  730. #define    IDM_SUN2_VME        2    /* Machine type for VME CPU board    */
  731. #define    IDM_SUN3_CARRERA    0x11    /* Carrera CPU    */
  732. #define    IDM_SUN3_M25        0x12    /* M25 CPU    */
  733. #define    IDM_SUN3_SIRIUS        0x13    /* Sirius CPU    */
  734. #define IDM_SUN3_PRISM        0x14    /* Prism CPU    */
  735. #define IDM_SUN3_F        0x17    /* Sun3F CPU    */
  736. #define IDM_SUN3_E        0x18    /* Sun3E CPU    */
  737. #define IDM_SUN4        0x21    /* Sparc CPU    */
  738. #define IDM_SUN4_COBRA        0x22    /* Cobra CPU    */
  739. #define IDM_SUN4_STINGRAY    0x23    /* Stingray CPU    */
  740. #define IDM_SUN4_SUNRAY        0x24    /* Sunray CPU   */
  741. #define IDM_SUN3X_PEGASUS    0x41    /* Pegasus CPU    */
  742. #define IDM_SUN3X_HYDRA         0x42    /* Hydra CPU    */
  743. #define IDM_SUN4C               0x51    /* Campus CPU   */
  744. #define IDM_SUN4C_60        0x51    /* Campus-1 CPU */
  745. #define IDM_SUN4C_40        0x52    /* Reserve some names */
  746. #define IDM_SUN4C_65        0x53    /* That we might do */
  747. #define IDM_SUN4C_20        0x54    /* It might be bigger */
  748. #define IDM_SUN4C_70        0x55    /* It might be smaller */
  749. #define IDM_SUN4C_30        0x56    /* It might be faster */
  750. #define IDM_SUN4C_50        0x57    /* It might be slower */
  751. #define IDM_SUN4C_75        0x58    /* It might cost more */
  752. #define IDM_SUN4C_80        0x59    /* It might cost less */
  753. #define IDM_SUN4C_10        0x5a    /* It might sell well */
  754. #define IDM_SUN4C_45        0x5b    /* And then it might not */
  755. #define IDM_SUN4C_05        0x5c    /* It might be pink */
  756. #define IDM_SUN4C_85        0x5d    /* It might be blue */
  757. #define IDM_SUN4C_32        0x5e    /* I certainly don't know */
  758. #define IDM_SUN4C_HIKE        0x5f    /* Do you? */
  759.  
  760. #endif /*!_mon_idprom_h*/
  761. !
  762. !    .seg    "data"
  763. !    .asciz    "@(#)getidprom.s 1.3 88/02/08"
  764. !    Copyright (c) 1986 by Sun Microsystems, Inc.
  765. !
  766.  
  767. IDPROMBASE=0xffd047d8        ! base address of idprom in CTL space
  768. IDPROMSIZE=0x20            ! size of idprom
  769.  
  770.     .align 4
  771.     .seg    "text"
  772. !
  773. ! getidprom(addr, size)
  774. !
  775. ! Read the ID prom.
  776. ! This is mapped from IDPROMBASE for IDPROMSIZE bytes in the
  777. ! ASI_CTL address space for byte access only.
  778.     .global _getidprom
  779. _getidprom:
  780.     set     IDPROMBASE, %g1
  781.     clr     %g2
  782. 1:
  783.     ldub   [%g1 + %g2], %g7 ! get id prom byte
  784.     add     %g2, 1, %g2        ! interlock
  785.     stb     %g7, [%o0]        ! put it out
  786.     cmp     %g2, %o1        ! done yet?
  787.     bne,a   1b
  788.     add     %o0, 1, %o0        ! delay slot
  789.     retl                ! leaf routine return
  790.     nop                ! delay slot
  791. lSet * geoPtr->blocksPerRotSet;
  792. d285 14
  793. a298 5
  794.     sectorNumber = geoPtr->sectorsPerTrack * geoPtr->numHeads * cylinder +
  795.           geoPtr->sectorsPerTrack * geoPtr->tracksPerRotSet *
  796.           rotationalSet +
  797.           geoPtr->blockOffset[blockNumber];
  798.     sectorNumber += (fragNumber % FS_FRAGMENTS_PER_BLOCK) * SECTORS_PER_FRAG;
  799. d302 1
  800. a302 1
  801. #endif SCSI_DISK_BOOT
  802. d328 1
  803. a328 1
  804.     register Dev_DiskAddr *diskAddrPtr;
  805. d330 1
  806. a330 1
  807.     register FsGeometry *geoPtr;
  808. d336 1
  809. a336 1
  810.     geoPtr         = (FsGeometry *)data;
  811. d355 4
  812. d360 2
  813. a361 1
  814.                 rotationalSet + geoPtr->blockOffset[blockNumber] +
  815. d363 1
  816. d368 1
  817. a368 1
  818. #endif XYLOGICS_BOOT
  819. d393 5
  820. a397 4
  821.     register int sector;    /* Sector number, counting from zero  */
  822.     register int numSectors;    /* Number of sectors per track */
  823.     register int numHeads;    /* Number of heads on the disk */
  824.     register Dev_DiskAddr *diskAddrPtr;
  825. d407 2
  826. a408 1
  827. #endif XYLOGICS_BOOT
  828. d413 4
  829. a416 1
  830.  * Fs_IsSunLabel --
  831. d418 2
  832. a419 2
  833.  *    Poke around in the input buffer and see if it looks like
  834.  *    a Sun format disk label.
  835. d422 1
  836. a422 1
  837.  *    TRUE or FALSE
  838. d425 1
  839. a425 1
  840.  *    None.
  841. d429 23
  842. a451 6
  843. #ifdef notdef
  844. Boolean
  845. Fs_IsSunLabel(buffer)
  846.     Address buffer;    /* Buffer containing zero'th sector */
  847. {
  848.     register Sun_DiskLabel *sunLabelPtr;
  849. d453 15
  850. a467 2
  851.     sunLabelPtr = (Sun_DiskLabel *)buffer;
  852.     if (sunLabelPtr->magic == SUN_DISK_MAGIC) {
  853. d469 1
  854. a469 1
  855.      * Should check checkSum...
  856. d471 4
  857. a474 4
  858.     return(TRUE);
  859.     } else {
  860.     Sys_Printf("Sun magic <%x>\n", sunLabelPtr->magic);
  861.     return(FALSE);
  862. d476 1
  863. a477 24
  864. #endif
  865.  
  866. /*
  867.  *----------------------------------------------------------------------
  868.  *
  869.  * Fs_IsSpriteLabel --
  870.  *
  871.  *    Poke around in the input buffer and see if it looks like
  872.  *    a Sprite format disk header.
  873.  *
  874.  * Results:
  875.  *    TRUE or FALSE
  876.  *
  877.  * Side effects:
  878.  *    None.
  879.  *
  880.  *----------------------------------------------------------------------
  881.  */
  882. #ifdef notdef
  883. Boolean
  884. Fs_IsSpriteLabel(buffer)
  885.     Address buffer;    /* Buffer containing zero'th sector */
  886. {
  887.     register FsDiskHeader *diskHeaderPtr;
  888. a478 11
  889.     diskHeaderPtr = (FsDiskHeader *)buffer;
  890.     if (diskHeaderPtr->magic == FS_DISK_MAGIC) {
  891.     return(TRUE);
  892.     } else {
  893. #ifndef NO_PRINTF
  894.     Sys_Printf("Sprite magic <%x>\n", diskHeaderPtr->magic);
  895. #endif
  896.     return(FALSE);
  897.     }
  898. }
  899. #endif
  900. @
  901.  
  902.  
  903. 1.7
  904. log
  905. @Wasn't calling the correct device type read routine.
  906. @
  907. text
  908. @d11 1
  909. a11 1
  910. static char rcsid[] = "$Header: fsDisk.c,v 1.6 87/05/19 12:14:44 brent Exp $ SPRITE (Berkeley)";
  911. a17 1
  912. #include "fsInt.h"
  913. a18 1
  914. #include "fsLocalDomain.h"
  915. d20 1
  916. a20 2
  917. #include "fsPrefix.h"
  918. #include "sunDiskLabel.h"
  919. @
  920.  
  921.  
  922. 1.6
  923. log
  924. @Added mapping routines for drivers that need head/sector/cylinder
  925. addresses.
  926. @
  927. text
  928. @d11 1
  929. a11 1
  930. static char rcsid[] = "$Header: fsDisk.c,v 1.5 87/05/11 11:18:18 brent Exp $ SPRITE (Berkeley)";
  931. d84 6
  932. d96 1
  933. a96 1
  934.     status = (*fsRawDeviceOpsTable[0].readWrite)(FS_READ,
  935. d112 1
  936. a112 1
  937.     Sys_Printf("No header <%x>\n", status);
  938. d121 1
  939. a121 1
  940.     status = (*fsRawDeviceOpsTable[0].readWrite)(FS_READ,
  941. @
  942.  
  943.  
  944. 1.5
  945. log
  946. @Final trimmed down version
  947. @
  948. text
  949. @d11 1
  950. a11 1
  951. static char rcsid[] = "$Header: fsDisk.c,v 1.4 87/05/08 17:45:18 brent Exp $ SPRITE (Berkeley)";
  952. d30 2
  953. d99 1
  954. a99 1
  955.     numHeaderSectors = FS_NUM_DOMAIN_SECTORS;
  956. d103 1
  957. a103 1
  958.     numHeaderSectors = ((FsDiskHeader *)fsLabelBuffer)->numDomainSectors;
  959. d106 1
  960. a106 1
  961.     Sys_Printf("No disk header <%x>\n", status);
  962. d114 1
  963. a114 1
  964.                         numHeaderSectors);
  965. d124 1
  966. a124 1
  967.     Sys_Printf("Bad disk magic <%x>\n", headerPtr->magic);
  968. d162 1
  969. d187 99
  970. @
  971.  
  972.  
  973. 1.4
  974. log
  975. @Updated to reflect changes in fs header files
  976. @
  977. text
  978. @d11 1
  979. a11 1
  980. static char rcsid[] = "$Header: fsDisk.c,v 1.3 86/07/24 11:35:31 brent Exp $ SPRITE (Berkeley)";
  981. a35 5
  982.  * Global variables used because there is only one domain during a boot.
  983.  */
  984. Address fsLabelBuffer;
  985.  
  986. /*
  987. d44 5
  988. a48 2
  989. FsDomain *fsDomainPtr;
  990. FsHandle *fsRootHandlePtr;
  991. a73 1
  992.     register  Address buffer;        /* Read buffer */
  993. a86 1
  994.     buffer = (Address)Mem_Alloc(DEV_BYTES_PER_SECTOR);
  995. d90 2
  996. a91 2
  997.          buffer, 0, §orsRead);
  998.     if (Fs_IsSunLabel(buffer)) {
  999. d98 1
  1000. d100 3
  1001. a102 2
  1002.     headerSector = ((FsDiskHeader *)buffer)->domainSector;
  1003.     numHeaderSectors = ((FsDiskHeader *)buffer)->numDomainSectors;
  1004. a106 1
  1005.     fsLabelBuffer = buffer;
  1006. a119 1
  1007.     fsDomainPtr = (FsDomain *)Mem_Alloc(sizeof(FsDomain));
  1008. a135 1
  1009.     fsRootHandlePtr = (FsHandle *)Mem_Alloc(sizeof(FsHandle));
  1010. d201 1
  1011. d219 1
  1012. d237 1
  1013. d254 1
  1014. @
  1015.  
  1016.  
  1017. 1.3
  1018. log
  1019. @more trimming
  1020. @
  1021. text
  1022. @d11 1
  1023. a11 1
  1024. static char rcsid[] = "$Header: fsDisk.c,v 1.2 86/07/21 09:36:00 brent Exp $ SPRITE (Berkeley)";
  1025. d90 1
  1026. a90 1
  1027.     buffer = (Address)Mem_Alloc(BYTES_PER_SECTOR);
  1028. d114 1
  1029. a114 1
  1030.     headerPtr = (FsDomainHeader *)Mem_Alloc(BYTES_PER_SECTOR *
  1031. d164 1
  1032. a164 1
  1033. #define SECTORS_PER_FRAG    (FS_FRAGMENT_SIZE / BYTES_PER_SECTOR)
  1034. d168 1
  1035. a168 1
  1036.     register Fs_Geometry *geoPtr;
  1037. @
  1038.  
  1039.  
  1040. 1.2
  1041. log
  1042. @Scrunched the code down.  Solidified Fs_AttachDisk
  1043. @
  1044. text
  1045. @d11 1
  1046. a11 1
  1047. static char rcsid[] = "$Header: fsDisk.c,v 1.1 86/07/18 09:32:40 brent Exp $ SPRITE (Berkeley)";
  1048. d78 1
  1049. a78 1
  1050.     int numHeaderSectors;        /* Number of sectors in volume header */
  1051. d118 1
  1052. a118 1
  1053.          &numHeaderSectors);
  1054. d126 1
  1055. a126 1
  1056.     Sys_Printf("FsDiskAttach: Bad magic # <%x>\n", headerPtr->magic);
  1057. d250 1
  1058. d252 1
  1059. @
  1060.  
  1061.  
  1062. 1.1
  1063. log
  1064. @Initial revision
  1065. @
  1066. text
  1067. @d11 1
  1068. a11 1
  1069. static char rcsid[] = "$Header: fsDisk.c,v 1.10 86/07/09 14:08:53 brent Exp $ SPRITE (Berkeley)";
  1070. d25 1
  1071. d33 1
  1072. a33 2
  1073. static Boolean IsSunLabel();
  1074. static Boolean IsSpriteLabel();
  1075. d35 4
  1076. a38 1
  1077. static Fs_Device fsDevice;
  1078. d40 5
  1079. a44 1
  1080. FsDomain *fsDomainPtr;    /* Top level info for the boot domain */
  1081. d46 5
  1082. a50 1
  1083. FsHandle *fsDiskHandlePtr;
  1084. d57 3
  1085. a59 7
  1086.  *    Make a file handle for the raw disk we are booting from.
  1087.  *    This makes sure the disk is up, reads the volume header,
  1088.  *    and calls the initialization routine for the block I/O module
  1089.  *    of the disk's driver.  By the time this is called the device
  1090.  *    initialization routines have already been called from Dev_Config
  1091.  *    so the device driver knows how the disk is partitioned into
  1092.  *    volumes.
  1093. d70 1
  1094. a70 1
  1095. Fs_AttachDisk(ctlrNum, unitNum, partNum, handlePtrPtr)
  1096. a73 1
  1097.     FsHandle **handlePtrPtr;    /* Return, handle for raw disk */
  1098. d75 6
  1099. a80 8
  1100.     ReturnStatus status;    /* Error code */
  1101.     Address buffer;        /* Read buffer */
  1102.     int headerSector;        /* Starting sector of volume header */
  1103.     int numHeaderSectors;    /* Number of sectors in volume header */
  1104.     int sectorsRead;        /* Returned from read call */
  1105.     FsHandle    *handlePtr;    /* Reference to file handle for root */
  1106.     FsFileID    fileID;        /* ID for root directory of domain */
  1107.  
  1108. a84 1
  1109.     buffer = (Address)Mem_Alloc(BYTES_PER_SECTOR);
  1110. d86 3
  1111. a88 7
  1112.      * This dives right down to the device specific I/O routines in order
  1113.      * to read the special info kept at the beginning of the volume.
  1114.      * Once the volume header has been read the regular block I/O interface
  1115.      * to the device can be used.
  1116.      * Read the zero'th sector of the partition.  It has a copy of the
  1117.      * disk header, and that describes how the rest of the zero'th
  1118.      * cylinder is layed out.
  1119. d90 1
  1120. d93 3
  1121. a95 8
  1122.          fsDevice.unit, buffer, 0, §orsRead);
  1123.     if (status != SUCCESS) {
  1124.     return(status);
  1125.     }
  1126.     /*
  1127.      * Check for different disk formats.
  1128.      */
  1129.     if (IsSunLabel(buffer)) {
  1130. d102 3
  1131. a104 5
  1132.     } else if (IsSpriteLabel(buffer)) {
  1133.     register FsDiskHeader *diskHeaderPtr;
  1134.     diskHeaderPtr = (FsDiskHeader *)buffer;
  1135.     headerSector = diskHeaderPtr->domainSector;
  1136.     numHeaderSectors = diskHeaderPtr->numDomainSectors;
  1137. d106 1
  1138. a106 1
  1139.     Sys_Printf("No disk header\n");
  1140. d109 1
  1141. d111 2
  1142. a112 1
  1143.      * Read the volume header and save it with the domain.
  1144. d114 2
  1145. a115 1
  1146.     buffer = (Address)Mem_Alloc(BYTES_PER_SECTOR * numHeaderSectors);
  1147. d117 2
  1148. a118 1
  1149.          fsDevice.unit, buffer, headerSector, &numHeaderSectors);
  1150. d124 3
  1151. a126 4
  1152.     fsDomainPtr->headerPtr = (FsDomainHeader *)buffer;
  1153.     if (fsDomainPtr->headerPtr->magic != FS_DOMAIN_MAGIC) {
  1154.     Sys_Printf("FsDiskAttach: Bad magic # on volume header <%x>\n",
  1155.                   fsDomainPtr->headerPtr->magic);
  1156. d130 2
  1157. a131 5
  1158.      * Call the Block I/O initialization routine which sets up the
  1159.      * ClientData part of *devicePtr to reference the Fs_Geometry
  1160.      * part of the domain header.  Then overwrite the device
  1161.      * specification at was on the disk because the device unit depends on
  1162.      * the system configuration.
  1163. d133 9
  1164. a141 11
  1165.     (*fsBlockOpsTable[0].init)(&fsDevice, &fsDomainPtr->headerPtr->geometry);
  1166.     fsDomainPtr->headerPtr->device = fsDevice;
  1167.  
  1168.     fsDiskHandlePtr = (FsHandle *)Mem_Alloc(sizeof(FsHandle));
  1169.     fsDiskHandlePtr->fileID.serverID = -1;
  1170.     fsDiskHandlePtr->fileID.domain = 0;
  1171.     fsDiskHandlePtr->fileID.fileNumber = 0;
  1172.     fsDiskHandlePtr->fileID.version = -1;
  1173.     fsDiskHandlePtr->domainToken = (ClientData)fsDomainPtr;
  1174.  
  1175.     *handlePtrPtr = fsDiskHandlePtr;
  1176. d148 10
  1177. a157 1
  1178.  * IsSunLabel --
  1179. d159 36
  1180. d206 2
  1181. a207 2
  1182. static Boolean
  1183. IsSunLabel(buffer)
  1184. d219 1
  1185. d227 1
  1186. a227 1
  1187.  * IsSpriteLabel --
  1188. d240 2
  1189. a241 2
  1190. static Boolean
  1191. IsSpriteLabel(buffer)
  1192. a244 2
  1193.     register int index;
  1194.     register int checkSum;
  1195. d250 1
  1196. a252 45
  1197. }
  1198.  
  1199. /*
  1200.  *----------------------------------------------------------------------
  1201.  *
  1202.  * Fs_BlocksToSectors --
  1203.  *
  1204.  *    Convert from block indexes (actually, fragment indexes) to
  1205.  *    sectors using the geometry information on the disk.  This
  1206.  *    is a utility for block device drivers.
  1207.  *
  1208.  * Results:
  1209.  *    The sector number that corresponds to the fragment index.
  1210.  *    The caller has to make sure that its I/O doesn't cross a
  1211.  *    filesystem block boundary.
  1212.  *
  1213.  * Side effects:
  1214.  *    None.
  1215.  *
  1216.  *----------------------------------------------------------------------
  1217.  */
  1218. #define SECTORS_PER_FRAG    (FS_FRAGMENT_SIZE / BYTES_PER_SECTOR)
  1219. int
  1220. Fs_BlocksToSectors(fragNumber, geoPtr)
  1221.     int fragNumber;
  1222.     register Fs_Geometry *geoPtr;
  1223. {
  1224.     register int sectorNumber;    /* The sector corresponding to the fragment */
  1225.     register int cylinder;    /* The cylinder number of the fragment */
  1226.     register int rotationalSet;    /* The rotational set with cylinder of frag */
  1227.     register int blockNumber;    /* The block number within rotational set */
  1228.  
  1229.     blockNumber        = fragNumber / FS_FRAGMENTS_PER_BLOCK;
  1230.     cylinder        = blockNumber / geoPtr->blocksPerCylinder;
  1231.     blockNumber        -= cylinder * geoPtr->blocksPerCylinder;
  1232.     rotationalSet    = blockNumber / geoPtr->blocksPerRotSet;
  1233.     blockNumber        -= rotationalSet * geoPtr->blocksPerRotSet;
  1234.  
  1235.     sectorNumber = geoPtr->sectorsPerTrack * geoPtr->numHeads * cylinder +
  1236.           geoPtr->sectorsPerTrack * geoPtr->tracksPerRotSet *
  1237.           rotationalSet +
  1238.           geoPtr->blockOffset[blockNumber];
  1239.     sectorNumber += (fragNumber % FS_FRAGMENTS_PER_BLOCK) * SECTORS_PER_FRAG;
  1240.  
  1241.     return(sectorNumber);
  1242. @
  1243.